#ifndef SELECT_CUT_H
#define SELECT_CUT_H

#include "TopologicalOperation.h"

#include "Vector.h"

#include "PArray.h"
#include "FEMModel.h"

class FEMDrawer;
class Tetrahedron;
class SweepDescription;

struct TetnodTuple
{
	Tetrahedron * tetra_;
	Node *node_;
};

bool operator < (TetnodTuple const & t1, TetnodTuple const & t2);


class SurfaceSelector
{
public:
	FiniteElementModel * fem_;
	SweepDescription * desc_;
	virtual void ClearThisSweep ();
	virtual void JunkInvalidInformation ();  
	virtual void NextSweep ();
	virtual void RepositionNodes (Array<TetnodTuple>);
	virtual void UpdateNodes (AllCutComponentsMap const*);
	virtual void ValidatePointers ()const;
	virtual void Visualize (FEMDrawer*)const;
	SurfaceSelector (FiniteElementModel*);
	virtual ~SurfaceSelector ();
	virtual LinkArray<Triangle> SelectSurface ();
};

#endif /* SELECT_CUT_HH */


